return {
    {
        "mfussenegger/nvim-dap",
        config = function()
            local dap = require('dap')
            dap.adapters.cppdbg = {
                id = 'cppdbg',
                type = 'executable',
                command = '/home/lim/extension/debugAdapters/bin/OpenDebugAD7',
            }

            dap.configurations.cpp = {
                {
                    name = "Launch file",
                    type = "cppdbg",
                    request = "launch",
                    program = function()
                        return vim.fn.input('/home/lim/test/test', vim.fn.getcwd() .. '/', 'file')
                    end,
                    cwd = '${workspaceFolder}',
                    stopAtEntry = true,
                },
                {
                    name = 'Attach to gdbserver :1234',
                    type = 'cppdbg',
                    request = 'launch',
                    MIMode = 'gdb',
                    miDebuggerServerAddress = 'localhost:1234',
                    miDebuggerPath = '/usr/bin/gdb',
                    cwd = '${workspaceFolder}',
                    program = function()
                        return vim.fn.input('/home/lim/test/test', vim.fn.getcwd() .. '/', 'file')
                    end,
                },
            }

            dap.configurations.c = dap.configurations.cpp
            dap.configurations.rust = dap.configurations.cpp

            vim.keymap.set("n", "<leader>dc", function() require("dap").continue() end)
            vim.keymap.set("n", "<leader>db", function() require("dap").toggle_breakpoint() end)
            vim.keymap.set("n", "<leader>dn", function() require("dap").step_over() end)
            vim.keymap.set("n", "<leader>ds", function() require("dap").step_into() end)
            vim.keymap.set("n", "<leader>df", function() require("dap").step_out() end)
            vim.keymap.set("n", "<leader>dr", function() require("dap").open() end)
            vim.keymap.set("n", "<leader>dq", function() require("dap").disconnect() end)

            dap.listeners.after["event_initialized"]["key-map"] = function()
                vim.keymap.set("n", "c", function() require("dap").continue() end)
                vim.keymap.set("n", "b", function() require("dap").toggle_breakpoint() end)
                vim.keymap.set("n", "n", function() require("dap").step_over() end)
                vim.keymap.set("n", "s", function() require("dap").step_into() end)
                vim.keymap.set("n", "f", function() require("dap").step_out() end)
                vim.keymap.set("n", "r", function() require("dap").repl.open() end)
                vim.keymap.set("n", "q", function() require("dap").disconnect() end)
            end
        end
    },
    {
        'rcarriga/nvim-dap-ui',
        dependencies = {"nvim-dap",
                        "nvim-neotest/nvim-nio"},
        config = function()
            require("dapui").setup()
            local dap, dapui = require("dap"), require("dapui")
            dap.listeners.before.attach.dapui_config = function()
                dapui.open()
            end
            dap.listeners.before.launch.dapui_config = function()
                dapui.open()
            end
            dap.listeners.before.event_terminated.dapui_config = function()
                dapui.close()
            end
            dap.listeners.before.event_exited.dapui_config = function()
                dapui.close()
            end
            -- require("neodev").setup({
            --     library = { plugins = { "nvim-dap-ui" }, types = true },
            -- })
        end
    }
}
